// pages/cart/index.js
/*  1.支付页面加载的时候
       1.从缓存中获取购物车数据 渲染到页面中
         这些数据 checked=true
    2.微信支付
       1.哪些人 哪些账号 可以实现微信支付
         1.企业账号 
         2.企业账号的小程序 后台中 必须给开发者添加白名单
           1.一个APPID 可以同时绑定多个开发者
           2.这些开发者就可以共用这个appid 和它的开发权限
    3.点击支付按钮 开始支付
       1.先判断缓存中有没有token
       2.没有 跳转到授权页面 进行获取token
       3. 有token 
         4.创建订单，获取到订单编号  
         5.完成微信支付
         6.手动删除缓存中，已经被选中了的商品
         7.把删除后的购物车数据 填充回缓存中
         8.跳转页面


*/
//引入 promise 形式getsetting 请求的方法
import{ requestPayment,showToast} from '../../utils/asyncwx.js'
const http = require('../../utils/http.js');
import regeneratorRuntime from '../../lib/runtime/runtime'
Page({

  /**
   * 页面的初始数据
   */
  data: {
      address:{}, //收获地址 ，默认空对象
      cart:[], //购物车数组
      totalprice:0, //总价格
      totalnum:0, //总数量
     
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
 
 
 
setcart(cart){//设置工具栏状态 全选、总价、总数量
  
  
   // 计算总价格
   let totalprice=0
   let totalnum=0
  
   cart.forEach(v => {    
       totalprice=totalprice+v.goods_price*v.num
       totalnum=totalnum+v.num    
   });
   
  
   //2.给data赋值
   this.setData({    
    // allchecked,
     totalprice,
     totalnum,
     cart
   })
},



  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
      //1.获取缓存中的收获地址信息
      const address=wx.getStorageSync('address')
      //2.给data赋值
      this.setData({    
        address,       
      })
      console.log(address)
       //   2.获取缓存中的购物车数据 数组格式
      let cart=wx.getStorageSync("cart")||[]; //第一次是空则赋值为空数组   
      // 过滤后的cart数组
      cart=cart.filter( v=>v.checked )   
      this.setcart(cart)   
     

  },
  async handle_pay(e){//点击支付按钮
    try {
       //1 。判断缓存中有没有token
       const token=wx.getStorageSync("token")
       console.log('handle_pay token=',token)
       // 2.判断
       if(!token){        
         wx.navigateTo( //跳转到授权页面
           {url:'/pages/auth/index'}
         )
         return false
       } 
       
       //3.创建订单
       //3.1准备 请求头参数
       
       //3.2准备请求体参数
       const order_price=this.data.totalprice
       const consignee_addr=this.data.address.addall
       const cart=this.data.cart
       let goods=[]
       
       goods=cart.map(v=>{
         let data={}
         data.goods_id=v.goods_id  
         data.goods_price=v.goods_price 
         data.goods_number=v.num  
         return data
       })
       console.log(goods)
       //4.准备发送请求 创建订单 获取订单编号
       const url = '/my/orders/create'
       const postData={order_price,consignee_addr,goods}
       let { order_number } = await http.post(url,postData)
       console.log(order_number)
       if(order_number==null){
         order_number=123455
       }
       //5.发起预支付的接口
       const url_pre = '/my/orders/req_unifiedorder'
       const postData1={order_number}
       /*
       wx.requestPayment({
         timeStamp: '',
         nonceStr: '',
         package: '',
         signType: '',
         paySign: '',
         success: (result)=>{
           
         },
         fail: ()=>{},
         complete: ()=>{}
       });*/
       const {pay} = await http.post(url_pre,postData1) //获取pay参数
       if (pay==null){
         pay.timeStamp='asdfasdf'
         pay.nonceStr='asdfasdf'
         pay.package='asdfasdf'
         pay.signType='asdfasdf'
         pay.paySign='asdfasdf'
       }
       //6.直接发起微信支付
 
       await requestPayment(pay)
      
       //7. 查询后台订单状态
       const url_check = '/my/orders/checkorder'
       const res = await http.post(url_check,postData1) //获取订单状态
       await showToast({title:'支付成功！',icon:'success'})
       //8.手动删除缓存中，已经被选中了的商品
       let newcart=wx.getStorageInfoSync("cart") //获取完整数据包含已经删除的数据
       newcart=newcart.filter(v=>!v.checked)
       wx.setStorageSync("cart", newcart)
       //8.跳转到订单页面
       wx.navigateTo({
         url: '/pages/order/index',
         success: (result)=>{
           
         },
         fail: ()=>{},
         complete: ()=>{}
       });
      
    } catch (error) {
      console.log(error)
    }
   

      

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})